package InputStream;

import org.junit.jupiter.api.Test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

public class FileInputStreamTest {

    public static void main(String[] args) {


    }

    //使用read()单个字节读取文件
    @Test
    public void readFileBySingleByte() {
        String filePath ="D:\\aaaa\\test.txt";
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(filePath);
            int readByte=0;
            //read()：从输入流读取一个字节的数据，返回-1表示读取完毕。
            // 注意，UTF-8编码中，一个英文字母1各字节，可以直接使用read()读取
            //但是一个中文字符3个字节，不能直接使用read()读取
            while((readByte = fileInputStream.read())!=-1){

                System.out.print((char) readByte);//int 转成char显示。只有字母可以这样转
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                //关闭输入流
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
    //输出：My name is ZhangRuiyang

    //使用read(Byte[] b)多个字节读取文件
    @Test
    public void readFileByMultiByte() {
        String filePath ="D:\\aaaa\\test.txt";
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(filePath);
            //定义字节数组，一次读取八个字节
             byte[] b = new byte[8];
             int length=0;
            /*read(byte b[])：从输入流读取b.length字节的数据，
            返回的是实际读取的字节数，把读取的字节填入byte b[]
             返回-1表示读取完毕。*/
            // 注意，UTF-8编码中，一个英文字母1各字节，可以直接使用read(byte b[])读取
            //但是一个中文字符3个字节，不能直接使用read(byte b[])读取
            while((length =fileInputStream.read(b))!=-1){

                System.out.print(new String(b,0,length));//int 转成char显示。只有字母可以这样转
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                //关闭输入流.一定要关闭，否则会造成资源浪费
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}
